Subject: OD
Envivo Bio, Inc.; Confidential
Figure 1 is an interactive figure showing the microbial community
composition in each collected sample. Here, each color and shade
corresponds to a different genus. For reference, domestic dogs
(Canis familiaris) and gray wolves (Canis lupus) are
different species that belong to the same genus (Canis).
You can interact with this figure by:
- Hovering the cursor over a color in the stacked bar to see the
taxonomic identity, sample type, and relative abundance corresponding to
that color and bar
- Clicking and dragging the cursor over a portion of the figure to
zoom
- Single-clicking a genus’s name in the legend to remove that genus
from the figure
- Double-clicking (very quickly) a genus’s name in the legend
to only show that genus
Figure 1: Microbial community composition of
collected saliva, stool, and CapScan samples. CapScan samples are
ordered from proximal to distal intestine (i.e.,
increasing distance from mouth). Taxonomic composition is reported at
the genus rank. Genera present at <1% relative abundance across all
samples are reported as “Other genera”. Note: Blue =
Firmicutes; Yellow = Actinomycetes; Green =
Bacteroidetes; Red = Proteobacteria; Purple = all
other phyla. Shades of the same color (except purple) correspond to
different genera from the same phylum.
Figure 2 is an interactive figure showing the microbial community
composition at higher taxononomic resolution. Here, each row corresponds
to a unique microbe.
You can interact with this figure by:
- Hovering the cursor over a cell to see that microbe’s genus and
species (and strain when available), relative abundance, and full
taxonomic classification
- Clicking and dragging the cursor over a portion of the figure to
zoom
Figure 2: Heat map showing relative abundance of
microbes in each sample (N = 148 total identified). Each row corresponds
to a unique microbe and each column corresponds to an individual sample.
Note the relative abundance colorscale is in log units.
1.3 Notable microbes detected
- Bifidobacterium stercoris:
- Previously isolated strains shown to produce gamma-aminobutyric acid
(GABA) (Duranti et al., 2020), a compound that plays a role in
mitigating anxiety and depressive disorders
- Composed 1-5% of CapScan-sampled microbial communities
- Note: Renamed Bifidobacterium adolescentis in 2013
(Killer et al., 2013)
- Evtepia gabavorous:
- Previously isolated strain shown to metabolize GABA, likely using it
as a carbon and energy source (Strandwitz et al., 2019)
- Composed 1-2% of CapScan-sampled microbial communities
1.4 References
Duranti, S., Ruiz, L., Lugli, G.A., Tames, H., Milani, C.,
Mancabelli, L., et al. (2020) Bifidobacterium
adolescentis as a key member of the human gut microbiota in the
production of GABA. Sci Rep 10: 1–13.
Killer, J., Sedláček, I., Rada, V., Havlík, J., and Kopečný, J.
(2013) Reclassification of Bifidobacterium stercoris Kim et
al. 2010 as a later heterotypic synonym of Bifidobacterium
adolescentis. Int J Syst Evol Microbiol 63: 4350–4353.
Strandwitz, P., Kim, K.H., Terekhova, D., Liu, J.K., Sharma, A.,
Levering, J., et al. (2019) GABA-modulating bacteria of the
human gut microbiota. Nat Microbio 4: 396–403.
LS0tCnRpdGxlOiAiPGJyPiBUYXhvbm9taWMgcHJvZmlsaW5nIG9mIGJhY3RlcmlhbCBhbmQgYXJjaGFlYWwgY29tbXVuaXRpZXMgZnJvbSBzYWxpdmEsIHN0b29sLCBhbmQgQ2FwU2Nhbi1zYW1wbGVkIGd1dCBtZXRhZ2Vub21lcyIKb3V0cHV0OgogIGh0bWxfZG9jdW1lbnQ6CiAgICBkZl9wcmludDogcGFnZWQKICAgIHRvYzogdHJ1ZQogICAgdG9jX2Zsb2F0OiB0cnVlCiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdAogIHBkZl9kb2N1bWVudDogZGVmYXVsdAotLS0KCi0tLQoKPHN0eWxlPgpkaXYuaGlnaGxpZ2h0IHsKYmFja2dyb3VuZC1jb2xvcjogI0YyRjJGMjsKcGFkZGluZzogMHB4Owpib3JkZXItcmFkaXVzOiAycHg7Cn0KCjwvc3R5bGU+CgojIyMgPGI+PGk+U3ViamVjdDogT0Q8L2I+PC9pPgoqRW52aXZvIEJpbywgSW5jLjsgQ29uZmlkZW50aWFsKgoKYGBge3Igc2V0dXAsIGluY2x1ZGUgPSBGQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQpgYGAKCmBgYHtyIGFkZCBsb2dvLCBlY2hvID0gRkFMU0V9CmxvZ29fcGF0aCA8LSAiLi4vbG9nby9lbnZpdm8uc3ZnIgoKaHRtbHRvb2xzOjppbWcoc3JjID0ga25pdHI6OmltYWdlX3VyaShsb2dvX3BhdGgpLCAKICAgICAgICAgICAgICAgYWx0ID0gImxvZ28iLCAKICAgICAgICAgICAgICAgc3R5bGUgPSAicG9zaXRpb246YWJzb2x1dGU7IHRvcDowOyByaWdodDowOyBwYWRkaW5nOjEwcHg7IHdpZHRoOiAxNDVweDsgaGVpZ2h0OiA0MnB4IikKYGBgCgpgYGB7ciBsb2FkIHBhY2thZ2VzLCBpbmNsdWRlID0gRkFMU0V9CiMgTGlzdCByZXF1aXJlZCBwYWNrYWdlcwpjcmFuUGFja2FnZXMgPC0gYygiQmlvY01hbmFnZXIiLCAiZ2dwbG90MiIsICJkcGx5ciIsICJ0aWR5ciIsCiAgICAgICAgICAgICAgICAgICJhcGUiLCAiZ2dwbG90MiIsICJyZXNoYXBlMiIsICJwbG90bHkiLCAiaGVhdG1hcGx5IikKYmlvY1BhY2thZ2VzIDwtIGMoInBoeWxvc2VxIiwgIkJpb3N0cmluZ3MiKQoKIyBJbnN0YWxsIG1pc3NpbmcgQ1JBTiBwYWNrYWdlcwppbnN0YWxsZWRDUkFOIDwtIGNyYW5QYWNrYWdlcyAlaW4lIHJvd25hbWVzKGluc3RhbGxlZC5wYWNrYWdlcygpKQppZiAoYW55KGluc3RhbGxlZENSQU4gPT0gRkFMU0UpKSB7CiAgaW5zdGFsbC5wYWNrYWdlcyhjcmFuUGFja2FnZXNbIWluc3RhbGxlZENSQU5dLAogICAgICAgICAgICAgICAgICAgcmVwb3MgPSAnaHR0cDovL2NyYW4udXMuci1wcm9qZWN0Lm9yZycpCn0KCiMgSW5zdGFsbCBtaXNzaW5nIEJpb2NvbmR1Y3RvciBwYWNrYWdlcwppbnN0YWxsZWRCaW9jIDwtIGJpb2NQYWNrYWdlcyAlaW4lIHJvd25hbWVzKGluc3RhbGxlZC5wYWNrYWdlcygpKQppZiAoYW55KGluc3RhbGxlZEJpb2MgPT0gRkFMU0UpKSB7CiAgQmlvY01hbmFnZXI6Omluc3RhbGwoYmlvY1BhY2thZ2VzWyFpbnN0YWxsZWRCaW9jXSkKfQoKIyBMb2FkIHBhY2thZ2VzCmxhcHBseShjKGNyYW5QYWNrYWdlcywgYmlvY1BhY2thZ2VzKSwgbGlicmFyeSwgY2hhcmFjdGVyLm9ubHkgPSBUUlVFKQpgYGAKCmBgYHtyIGxvYWQgZGF0YSwgaW5jbHVkZSA9IEZBTFNFfQojIExvYWQgQ29zbW9zSUQgZGF0YSBhbmQgZm9ybWF0dGVkIG1ldGFkYXRhCmNvc21vcyA8LSByZWFkLmNzdihmaWxlID0gIi4uL2RhdGEvQ1AwNDYxOF9jb3Ntb3NpZF8yMDIyMDkwNi5jc3YiKQptZXRhIDwtIHJlYWQuY3N2KGZpbGUgPSAiLi4vZGF0YS9DUDA0NjE4X21ldGFkYXRhLmNzdiIpCmBgYAoKYGBge3IgZm9ybWF0IGRhdGEsIGluY2x1ZGUgPSBGQUxTRX0KIyBQcmVwYXJlIHRheF90YWJsZSBhbmQgb3R1X3RhYmxlIG9iamVjdHMKdGF4IDwtIGNvc21vcyAlPiUKICBzZWxlY3QoUGh5bHVtLCBDbGFzcywgT3JkZXIsIEZhbWlseSwgR2VudXMsIFNwZWNpZXMsIFN0cmFpbikgJT4lCiAgYXMubWF0cml4ICU+JQogIHRheF90YWJsZQoKc3RhcnRfaW5kIDwtIGdyZXAoIlN0cmFpbiIsIGNvbG5hbWVzKGNvc21vcykpKzEKc3RvcF9pbmQgPC0gbmNvbChjb3Ntb3MpLTIKYWJ1bmRhbmNlX3Njb3JlcyA8LSBjb3Ntb3NbLHN0YXJ0X2luZDpzdG9wX2luZF0gJT4lIG90dV90YWJsZSguLCB0YXhhX2FyZV9yb3dzID0gVFJVRSkKCiMgUmVmb3JtYXQgc2FtcGxlIG5hbWVzIGFuZCBtZXRhZGF0YSBzYW1wbGUgbmFtZXMgc28gdGhleSBtYXRjaApjb2xuYW1lcyhhYnVuZGFuY2Vfc2NvcmVzKSA8LSBjb2xuYW1lcyhhYnVuZGFuY2Vfc2NvcmVzKSAlPiUKICBnc3ViKCJYIiwgIiIsIC4pICU+JQogIGdzdWIoIl8uKiIsICIiLCAuKSAlPiUKICBwYXN0ZTAoIkVCXyIsIC4pCgpyb3cubmFtZXMobWV0YSkgPC0gbWV0YSAlPiUKICBwdWxsKFNhbXBsZV9udW1iZXIpICU+JQogIHBhc3RlMCgiRUJfIiwgLikKCnNhbV9kYXRhIDwtIHNhbXBsZV9kYXRhKG1ldGEpCmBgYAoKYGBge3IgYnVpbGQgcGh5bG9zZXEsIGluY2x1ZGUgPSBGQUxTRX0KIyBCdWlsZCBwaHlsb3NlcSBvYmplY3QKcHMgPC0gcGh5bG9zZXEodGF4LCBhYnVuZGFuY2Vfc2NvcmVzLCBzYW1fZGF0YSkKYGBgCgpgYGB7ciB0cmFuc2Zvcm0gZGF0YSwgaW5jbHVkZSA9IEZBTFNFfQojIExvZyB0cmFuc2Zvcm0KcHNMb2cgPC0gcHMgJT4lIHRyYW5zZm9ybV9zYW1wbGVfY291bnRzKC4sIGZ1bmN0aW9uKHgpIGxvZyh4ICsgMSwgYmFzZSA9IDEwKSkKCiMgUmVsYXRpdmUgYWJ1bmRhbmNlIHRyYW5zZm9ybQpwc1JBIDwtIHBzICU+JSB0cmFuc2Zvcm1fc2FtcGxlX2NvdW50cyguLCBmdW5jdGlvbih4KSB4L3N1bSh4KSoxMDApCmBgYAoKYGBge3IgcmFuayBwaHlsYSwgaW5jbHVkZSA9IEZBTFNFfQpwaHlfcmFuayA8LSBwc1JBICU+JQogIHRheF9nbG9tKC4sIHRheHJhbmsgPSAiUGh5bHVtIikgJT4lCiAgcHNtZWx0ICU+JQogIGdyb3VwX2J5KFBoeWx1bSkgJT4lCiAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihBYnVuZGFuY2UpKQoKcGh5X3JhbmsgJT4lIGFycmFuZ2UoZGVzYyhtZWRpYW4pKQpgYGAKCmBgYHtyIHN1YmplY3Qgc3Vic2V0LCBpbmNsdWRlID0gRkFMU0V9CiMgU2V0IHN1YmplY3QKc3ViamVjdCA8LSAiT0QiCgojIFN1YnNldCB0byBzdWJqZWN0IHNhbXBsZXMgYW5kIGRyb3AgbWlzc2luZyB0YXhhCnBzU3ViIDwtIHN1YnNldF9zYW1wbGVzKHBzLCBTdWJqZWN0ID09IHN1YmplY3QpICU+JQogIHBydW5lX3RheGEodGF4YV9zdW1zKC4pID4gMCwgLikKCiMgQWRkIHBsb3QgbGFiZWwgZm9yIGVhY2ggc2FtcGxlCnNhbXBsZV9kYXRhKHBzU3ViKSRQbG90X2xhYmVsIDwtIHBhc3RlMChzYW1wbGVfbmFtZXMocHNTdWIpLCAiICgiLCBzYW1wbGVfZGF0YShwc1N1YikkU2FtcGxlX3R5cGUsICIpIikKCiMgUmVsYXRpdmUgYWJ1bmRhbmNlIHRyYW5zZm9ybQpwc1N1Yl9yYSA8LSBwc1N1YiAlPiUgdHJhbnNmb3JtX3NhbXBsZV9jb3VudHMoLiwgZnVuY3Rpb24oeCkgeC9zdW0oeCkqMTAwKQpgYGAKCmBgYHtyIHBsb3QgYmFyLCBpbmNsdWRlID0gRkFMU0V9CiMgRGVmaW5lIE5PVCBJTiBvcGVyYXRvcgonJSFpbiUnIDwtIGZ1bmN0aW9uKHgseSkhKCclaW4lJyh4LHkpKQoKIyBBZ2dsb21lcmF0ZSBhdCBHZW51cyBhbmQgbWVsdAp0YXhyYW5rIDwtICJHZW51cyIKbWVsdCA8LSBwc1N1Yl9yYSAlPiUgdGF4X2dsb20oLiwgdGF4cmFuayA9IHRheHJhbmspICU+JSBwc21lbHQKCiMgRGVmaW5lIG1ham9yIHBoeWxhCm1ham9yX3BoeSA8LSBjKCJGaXJtaWN1dGVzIiwgIkFjdGlub2JhY3RlcmlhIiwgIkJhY3Rlcm9pZGV0ZXMiLCAiUHJvdGVvYmFjdGVyaWEiKQoKIyBJZGVudGlmeSBnZW5lcmEgcHJlc2VudCBpbiA8MSUgcmVsYXRpdmUgYWJ1bmRhbmNlIGluIGFsbCBzYW1wbGVzCnJhcmVfZ2VuZXJhIDwtIG1lbHQgJT4lCiAgZ3JvdXBfYnkoU2FtcGxlX251bWJlciwgR2VudXMpICU+JQogIHN1bW1hcml6ZShzdW0gPSBzdW0oQWJ1bmRhbmNlKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIGdyb3VwX2J5KEdlbnVzKSAlPiUKICBzdW1tYXJpemUobWF4ID0gbWF4KHN1bSkpICU+JQogIGZpbHRlcihtYXggPCAxKSAlPiUKICBwdWxsKEdlbnVzKQoKIyBDcmVhdGUgbmV3IGNvbHVtbiBjb250YWluaW5nIG5hbWUgb2YgZ2VudXMgaWYgYWJvdmUgY3V0b2ZmIG9yICJPdGhlciBnZW5lcmEiIGlmIG5vdApkZiA8LSBtZWx0ICU+JQogIG11dGF0ZShQaHlfZ3JvdXAgPSBjYXNlX3doZW4oUGh5bHVtICUhaW4lIG1ham9yX3BoeSB+ICJPdGhlciBwaHlsdW0iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSB+IFBoeWx1bSksCiAgICAgICAgIFBoeV9ncm91cCA9IGNhc2Vfd2hlbihHZW51cyAlaW4lIHJhcmVfZ2VuZXJhIH4gIk90aGVyIHBoeWx1bSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gUGh5X2dyb3VwKSwKICAgICAgICAgVGF4X2xhYmVsID0gY2FzZV93aGVuKEdlbnVzICVpbiUgcmFyZV9nZW5lcmEgfiAiQWFPdGhlciBnZW5lcmEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSB+IEdlbnVzKSkgJT4lCiAgZ3JvdXBfYnkoU3ViamVjdCkgJT4lCiAgYXJyYW5nZShTdWJqZWN0LCBTYW1wbGVfdHlwZSkKCiMgRGVmaW5lIG9yZGVyCnBoeV9vcmRlciA8LSBjKCJPdGhlciBwaHlsdW0iLAogICAgICAgICAgICAgICAiUHJvdGVvYmFjdGVyaWEiLAogICAgICAgICAgICAgICAiQmFjdGVyb2lkZXRlcyIsCiAgICAgICAgICAgICAgICJBY3Rpbm9iYWN0ZXJpYSIsCiAgICAgICAgICAgICAgICJGaXJtaWN1dGVzIikgJT4lIHJldgoKZ2VuX29yZGVyIDwtIGRmICU+JQogIHNlbGVjdChQaHlfZ3JvdXAsIFRheF9sYWJlbCkgJT4lCiAgbXV0YXRlKE9yZGVyID0gbWF0Y2goUGh5X2dyb3VwLCBwaHlfb3JkZXIpKSAlPiUKICBhcnJhbmdlKE9yZGVyLCBkZXNjKFRheF9sYWJlbCkpICU+JQogIGRpc3RpbmN0ICU+JQogIHB1bGwoVGF4X2xhYmVsKQoKZ2VuX29yZGVyIDwtIGZhY3Rvcihnc3ViKCJeQWEiLCAiIiwgZ2VuX29yZGVyKSwgbGV2ZWxzID0gZ3N1YigiXkFhIiwgIiIsIGdlbl9vcmRlcikpICMgdGhlIEFhIGlzIHRvIG1ha2Ugc3VyZSAiT3RoZXIiIGlzIHBsb3R0ZWQgYXQgdGhlIHRvcAoKZGYgPC0gZGYgJT4lCiAgbXV0YXRlKFRheF9sYWJlbCA9IGZhY3Rvcihnc3ViKCJeQWEiLCAiIiwgVGF4X2xhYmVsKSwgbGV2ZWxzID0gZ2VuX29yZGVyKSkKCiMgRGVmaW5lIGNvbG9ycwpwaHlfY29sb3IgPC0gZGF0YS5mcmFtZShQaHlsdW0gPSBjKCJBY3Rpbm9iYWN0ZXJpYSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk90aGVyIHBoeWx1bSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJhY3Rlcm9pZGV0ZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGaXJtaWN1dGVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJvdGVvYmFjdGVyaWEiKSwKICAgICAgICAgICAgICAgICAgICAgICAgQmFzZV9jb2xvciA9IGMoIiNGRkI3MjQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIzgzMkNGRiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjNjRDNjJBIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiMwNzJBQzgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiI0U5M0I0RiIpKQoKcGh5X2NvbG9yIDwtIHBoeV9jb2xvclttYXRjaChwaHlfb3JkZXIsIHBoeV9jb2xvciRQaHlsdW0pLF0KCiMgRGF0YSBmcmFtZSBhcyBpbnB1dCwgZGF0YSBmcmFtZSB3aXRoIG5ldyBjb2x1bW4gb2YgaGV4IGNvZGVzIGFzIG91dHB1dApjb2xfcGFsZXR0ZSA8LSBkZiAlPiUKICBzZWxlY3QoUGh5X2dyb3VwLCBUYXhfbGFiZWwpICU+JQogIGRpc3RpbmN0ICU+JQogIG11dGF0ZShIZXhfY29kZSA9IE5BKQoKCmZvcihwaHkgaW4gcGh5X2NvbG9yJFBoeWx1bSkgewogIHRlc3QgPC0gY29sX3BhbGV0dGUgJT4lCiAgICBmaWx0ZXIoUGh5X2dyb3VwID09IHBoeSkgJT4lCiAgICBwdWxsKFRheF9sYWJlbCkgJT4lCiAgICBkcm9wbGV2ZWxzICU+JQogICAgbGV2ZWxzCiAgCiAgdGF4LmNvbG9yIDwtIGNvbG9yUmFtcFBhbGV0dGUoYyhwaHlfY29sb3IkQmFzZV9jb2xvclttYXRjaChwaHksIHBoeV9jb2xvciRQaHlsdW0pXSwgIndoaXRlIikpCiAgY29sdGVzdCA8LSB0YXguY29sb3IobGVuZ3RoKHRlc3QpKzIpICU+JQogICAgLlstbGVuZ3RoKC4pXQogIGNvbF9wYWxldHRlJEhleF9jb2RlW21hdGNoKHRlc3QsIGNvbF9wYWxldHRlJFRheF9sYWJlbCldIDwtIGNvbHRlc3QKfQoKY29sX3BhbGV0dGUgPC0gY29sX3BhbGV0dGUgJT4lIGFycmFuZ2UoZmFjdG9yKFRheF9sYWJlbCwgbGV2ZWxzID0gZ2VuX29yZGVyKSkKYGBgCgo8ZGl2IGNsYXNzPSJoaWdobGlnaHQiPgojIyMgMS4xIE92ZXJ2aWV3IG9mIG1pY3JvYmlhbCBjb21tdW5pdHkgY29tcG9zaXRpb24KPC9kaXY+CgpGaWd1cmUgMSBpcyBhbiBpbnRlcmFjdGl2ZSBmaWd1cmUgc2hvd2luZyB0aGUgbWljcm9iaWFsIGNvbW11bml0eSBjb21wb3NpdGlvbiBpbiBlYWNoIGNvbGxlY3RlZCBzYW1wbGUuIEhlcmUsIGVhY2ggY29sb3IgYW5kIHNoYWRlIGNvcnJlc3BvbmRzIHRvIGEgZGlmZmVyZW50IGdlbnVzLiBGb3IgcmVmZXJlbmNlLCBkb21lc3RpYyBkb2dzICgqQ2FuaXMgZmFtaWxpYXJpcyopIGFuZCBncmF5IHdvbHZlcyAoKkNhbmlzIGx1cHVzKikgYXJlIGRpZmZlcmVudCBzcGVjaWVzIHRoYXQgYmVsb25nIHRvIHRoZSBzYW1lIGdlbnVzICgqQ2FuaXMqKS4KPGJyPjxicj4KWW91IGNhbiBpbnRlcmFjdCB3aXRoIHRoaXMgZmlndXJlIGJ5OgoKKiBIb3ZlcmluZyB0aGUgY3Vyc29yIG92ZXIgYSBjb2xvciBpbiB0aGUgc3RhY2tlZCBiYXIgdG8gc2VlIHRoZSB0YXhvbm9taWMgaWRlbnRpdHksIHNhbXBsZSB0eXBlLCBhbmQgcmVsYXRpdmUgYWJ1bmRhbmNlIGNvcnJlc3BvbmRpbmcgdG8gdGhhdCBjb2xvciBhbmQgYmFyCiogQ2xpY2tpbmcgYW5kIGRyYWdnaW5nIHRoZSBjdXJzb3Igb3ZlciBhIHBvcnRpb24gb2YgdGhlIGZpZ3VyZSB0byB6b29tCiogU2luZ2xlLWNsaWNraW5nIGEgZ2VudXMncyBuYW1lIGluIHRoZSBsZWdlbmQgdG8gcmVtb3ZlIHRoYXQgZ2VudXMgZnJvbSB0aGUgZmlndXJlCiogRG91YmxlLWNsaWNraW5nICg8dT52ZXJ5IHF1aWNrbHk8L3U+KSBhIGdlbnVzJ3MgbmFtZSBpbiB0aGUgbGVnZW5kIHRvIG9ubHkgc2hvdyB0aGF0IGdlbnVzCmBgYHtyLCBvdXQud2lkdGggPSAiMTAwJSIsIGVjaG8gPSBGQUxTRX0KIyBQbG90CnBCYXIgPC0gcGxvdF9seShkZiwgeCA9IH5QbG90X2xhYmVsLCB5ID0gfkFidW5kYW5jZSwgdHlwZSA9ICJiYXIiLAogICAgICAgICAgICAgY29sb3IgPSB+VGF4X2xhYmVsLCBjb2xvcnMgPSBjb2xfcGFsZXR0ZSRIZXhfY29kZSwKICAgICAgICAgICAgIHRleHRwb3NpdGlvbiA9ICJub25lIiwKICAgICAgICAgICAgIHRleHQgPSB+cGFzdGUoIjxiPkdlbnVzOjwvYj4iLCBUYXhfbGFiZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICI8YnI+PGJyPiIsICI8Yj5TYW1wbGUgdHlwZTo8L2I+IiwgU2FtcGxlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICI8YnI+IiwgIjxiPlJlbGF0aXZlIGFidW5kYW5jZTo8L2I+IiwgcGFzdGUwKHJvdW5kKEFidW5kYW5jZSwgZGlnaXRzID0gMSksICIlIikpLAogICAgICAgICAgICAgaG92ZXJpbmZvID0gInRleHQiKSAlPiUKICBsYXlvdXQoeGF4aXMgPSBsaXN0KHRpdGxlID0gIjxiPlNhbXBsZTwvYj4iLAogICAgICAgICAgICAgICAgICAgICAgdGlja3MgPSAib3V0c2lkZSIpLAogICAgICAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiPGI+UmVsYXRpdmUgYWJ1bmRhbmNlICglKTwvYj4iLAogICAgICAgICAgICAgICAgICAgICAgdGlja3MgPSAib3V0c2lkZSIpLAogICAgICAgICBiYXJtb2RlID0gInN0YWNrIiwKICAgICAgICAgZm9udCA9IGxpc3QoZmFtaWx5ID0gIkFyaWFsIikpCgpwQmFyJHgkbGF5b3V0JHlheGlzJGxpbmVjb2xvciA8LSAiIzAwMDAwMCIKcEJhcgpgYGAKKipGaWd1cmUgMToqKiBNaWNyb2JpYWwgY29tbXVuaXR5IGNvbXBvc2l0aW9uIG9mIGNvbGxlY3RlZCBzYWxpdmEsIHN0b29sLCBhbmQgQ2FwU2NhbiBzYW1wbGVzLiBDYXBTY2FuIHNhbXBsZXMgYXJlIG9yZGVyZWQgZnJvbSBwcm94aW1hbCB0byBkaXN0YWwgaW50ZXN0aW5lICgqaSouKmUqLiwgaW5jcmVhc2luZyBkaXN0YW5jZSBmcm9tIG1vdXRoKS4gVGF4b25vbWljIGNvbXBvc2l0aW9uIGlzIHJlcG9ydGVkIGF0IHRoZSBnZW51cyByYW5rLiBHZW5lcmEgcHJlc2VudCBhdCA8MSUgcmVsYXRpdmUgYWJ1bmRhbmNlIGFjcm9zcyBhbGwgc2FtcGxlcyBhcmUgcmVwb3J0ZWQgYXMgIk90aGVyIGdlbmVyYSIuIDx1Pk5vdGU6PC91PiBCbHVlID0gKkZpcm1pY3V0ZXMqOyBZZWxsb3cgPSAqQWN0aW5vbXljZXRlcyo7IEdyZWVuID0gKkJhY3Rlcm9pZGV0ZXMqOyBSZWQgPSAqUHJvdGVvYmFjdGVyaWEqOyBQdXJwbGUgPSBhbGwgb3RoZXIgcGh5bGEuIFNoYWRlcyBvZiB0aGUgc2FtZSBjb2xvciAoZXhjZXB0IHB1cnBsZSkgY29ycmVzcG9uZCB0byBkaWZmZXJlbnQgZ2VuZXJhIGZyb20gdGhlIHNhbWUgcGh5bHVtLgoKYGBge3IsIGluY2x1ZGUgPSBGQUxTRX0KIyBPcmRpbmF0aW9uLWJhc2VkCnBIZWF0X29yZCA8LSBwbG90X2hlYXRtYXAocHNTdWJfcmEsIG1ldGhvZCA9ICJOTURTIiwgZGlzdGFuY2UgPSAiYnJheSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4YS5sYWJlbCA9ICJTdHJhaW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgIG1heC5sYWJlbCA9IDMwMCkKCiMgUmV0cmlldmUgcm93IGFuZCB0YXhvbiBvcmRlcnMKcm93X29yZGVyIDwtIHBIZWF0X29yZCRwbG90X2VudiR0YXhhLm9yZGVyICU+JSByZXYKdGF4X29yZGVyIDwtIHRheF90YWJsZShwc1N1Yl9yYSlbbWF0Y2gocm93X29yZGVyLCByb3duYW1lcyh0YXhfdGFibGUocHNTdWJfcmEpKSksXSAlPiUKICBhcy5kYXRhLmZyYW1lICU+JQogIG11dGF0ZSh0YXhvbiA9IHJvd25hbWVzKC4pLAogICAgICAgICBBYnVuZGFuY2UgPSAxLAogICAgICAgICBTYW1wbGUgPSBzdWJqZWN0KQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gRkFMU0V9CiMgUHJlcGFyZSBkYXRhCnggPC0gcHNTdWJfcmEgJT4lIG90dV90YWJsZSAlPiUgYXMuZGF0YS5mcmFtZQpjb2xuYW1lcyh4KSA8LSBsYXBwbHkoY29sbmFtZXMoeCksIGdyZXAsIHNhbXBsZV9kYXRhKHBzU3ViX3JhKSRQbG90X2xhYmVsLCB2YWx1ZSA9IFRSVUUpICU+JSB1bmxpc3QKCiMgQWRkIHRheG9ub215CnggPC0gY2JpbmQoeCwgdGF4X3RhYmxlKHBzU3ViX3JhKSkKCiMgUmVvcmRlciByb3dzIGFuZCBjb2x1bW5zIHRvIG1hdGNoIG9yZGluYXRpb24KeCA8LSB4W21hdGNoKHJvd19vcmRlciwgcm93bmFtZXMoeCkpLF0KCiMgU2V0IGhvdmVydGV4dApuc2FtcCA8LSBuc2FtcGxlcyhwc1N1Yl9yYSkKaG92ZXJfc3RyYWluIDwtIHhbLCAxOm5zYW1wXQpob3Zlcl9zdHJhaW5bXSA8LSBwYXN0ZTAoIjxiPk1pY3JvYmU6PC9iPiAiLCB4JFN0cmFpbiwgIlxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICI8Yj5SZWxhdGl2ZSBhYnVuZGFuY2U6PC9iPiAiKQpob3Zlcl9zdHJhaW4gPC0gYXMubWF0cml4KGhvdmVyX3N0cmFpbikKCmhvdmVyX2FidW5kIDwtIHhbLCAxOm5zYW1wXSAlPiUgcm91bmQoLiwgZGlnaXRzID0gMikgJT4lIGFzLmRhdGEuZnJhbWUKaG92ZXJfYWJ1bmQgPC0gYXBwbHkoaG92ZXJfYWJ1bmQsIDIsIHBhc3RlMCwgIiUiKQpob3Zlcl9hYnVuZCA8LSBhcy5tYXRyaXgoaG92ZXJfYWJ1bmQpCgpob3Zlcl90YXggPC0geFssIDE6bnNhbXBdCmhvdmVyX3RheFtdIDwtIHBhc3RlMCgiXG4gXG48Yj5QaHlsdW06PC9iPiAiLCB4JFBoeWx1bSwgIlxuIiwKICAgICAgICAgICAgICAgICAgICI8Yj5DbGFzczo8L2I+ICIsIHgkQ2xhc3MsICJcbiIsCiAgICAgICAgICAgICAgICAgICAiPGI+T3JkZXI6PC9iPiAiLCB4JE9yZGVyLCAiXG4iLAogICAgICAgICAgICAgICAgICAgIjxiPkZhbWlseTo8L2I+ICIsIHgkRmFtaWx5LCAiXG4iLAogICAgICAgICAgICAgICAgICAgIjxiPkdlbnVzOjwvYj4gIiwgeCRHZW51cywgIlxuIikKaG92ZXJfdGF4IDwtIGFzLm1hdHJpeChob3Zlcl90YXgpCgpob3ZlcnRleHQgPC0gbWF0cml4KHBhc3RlMChob3Zlcl9zdHJhaW4sIGhvdmVyX2FidW5kLCBob3Zlcl90YXgpLAogICAgICAgICAgICAgICAgbnJvdyA9IG5yb3coaG92ZXJfdGF4KSwgbmNvbCA9IG5jb2woaG92ZXJfdGF4KSkKCiMgUGVyZm9ybSBsb2cxMCB0cmFuc2Zvcm1hdGlvbiBvbiByZWxhdGl2ZSBhYnVuZGFuY2VzCmRhdGEgPC0gbG9nKHhbLCAxOm5zYW1wXSwgYmFzZSA9IDEwKQpkYXRhW3NhcHBseShkYXRhLCBpcy5pbmZpbml0ZSldIDwtIE5BCmBgYAo8YnI+PGJyPgoKPGRpdiBjbGFzcz0iaGlnaGxpZ2h0Ij4KIyMjIDEuMiBIaWdoLXJlc29sdXRpb24gc25hcHNob3Qgb2YgY29tbXVuaXR5IGNvbXBvc2l0aW9uCjwvZGl2PgpGaWd1cmUgMiBpcyBhbiBpbnRlcmFjdGl2ZSBmaWd1cmUgc2hvd2luZyB0aGUgbWljcm9iaWFsIGNvbW11bml0eSBjb21wb3NpdGlvbiBhdCBoaWdoZXIgdGF4b25vbm9taWMgcmVzb2x1dGlvbi4gSGVyZSwgZWFjaCByb3cgY29ycmVzcG9uZHMgdG8gYSB1bmlxdWUgbWljcm9iZS4KPGJyPjxicj4KWW91IGNhbiBpbnRlcmFjdCB3aXRoIHRoaXMgZmlndXJlIGJ5OgoKKiBIb3ZlcmluZyB0aGUgY3Vyc29yIG92ZXIgYSBjZWxsIHRvIHNlZSB0aGF0IG1pY3JvYmUncyBnZW51cyBhbmQgc3BlY2llcyAoYW5kIHN0cmFpbiB3aGVuIGF2YWlsYWJsZSksIHJlbGF0aXZlIGFidW5kYW5jZSwgYW5kIGZ1bGwgdGF4b25vbWljIGNsYXNzaWZpY2F0aW9uCiogQ2xpY2tpbmcgYW5kIGRyYWdnaW5nIHRoZSBjdXJzb3Igb3ZlciBhIHBvcnRpb24gb2YgdGhlIGZpZ3VyZSB0byB6b29tCgo8YnI+PGJyPgpgYGB7ciwgb3V0LmhlaWdodCA9ICI3NTBweCIsIGVjaG8gPSBGQUxTRX0KIyBTZXQgc2FtcGxlIG5hbWVzCiNjb2xuYW1lcyhkYXRhKSA8LSBjKCJFQl8yNjkgKHNhbGl2YSkiLCAiRUJfMjcwIChDYXBTY2FuKSIsICJFQl8yNzEgKENhcFNjYW4pIiwKIyAgICAgICAgICAgICAgICAgICAgIkVCXzI3MiAoQ2FwU2NhbikiLCAiRUJfMjczIChDYXBTY2FuKSIsICJFQl8yNzQgKHN0b29sKSIpCgojIFByZXBhcmUgdGF4b25vbXkgcm93IHNpZGUKcm93X3NpZGUgPC0geCAlPiUgc2VsZWN0KFBoeWx1bSkKcm93X3NpZGUkUGh5bHVtW3Jvd19zaWRlJFBoeWx1bSAlIWluJSBtYWpvcl9waHldIDwtICJPdGhlciBwaHlsYSIKcm93X3NpZGUkUGh5bHVtIDwtIGZhY3Rvcihyb3dfc2lkZSRQaHlsdW0sIGxldmVscyA9IGMoIk90aGVyIHBoeWxhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByb3Rlb2JhY3RlcmlhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJhY3Rlcm9pZGV0ZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWN0aW5vYmFjdGVyaWEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmlybWljdXRlcyIpKQoKIyBQbG90CnBIZWF0IDwtIGhlYXRtYXBseShkYXRhLAogICAgICAgICAgICAgICAgICAgUm93diA9IEZBTFNFLAogICAgICAgICAgICAgICAgICAgQ29sdiA9IEZBTFNFLAogICAgICAgICAgICAgICAgICAgY29sb3JzID0gdmlyaWRpczo6dmlyaWRpcygxMCksCiAgICAgICAgICAgICAgICAgICByb3dfc2lkZV9jb2xvcnMgPSByb3dfc2lkZSwKICAgICAgICAgICAgICAgICAgIHJvd19zaWRlX3BhbGV0dGUgPSBjKCJBY3Rpbm9iYWN0ZXJpYSIgPSAiI0ZGQjcyNCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQmFjdGVyb2lkZXRlcyIgPSAiIzY0QzYyQSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmlybWljdXRlcyIgPSAiIzA3MkFDOCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJvdGVvYmFjdGVyaWEiID0gIiNFOTNCNEYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk90aGVyIHBoeWxhIiA9ICIjODMyQ0ZGIiksCiAgICAgICAgICAgICAgICAgICBzdWJwbG90X21hcmdpbiA9IDAuMDEsCiAgICAgICAgICAgICAgICAgICBzdWJwbG90X3dpZHRocyA9IGMoMC45LCAwLjA3KSwKICAgICAgICAgICAgICAgICAgIHNpZGVfY29sb3JfY29sb3JiYXJfbGVuID0gMC4zLAogICAgICAgICAgICAgICAgICAgcGxvdF9tZXRob2QgPSAicGxvdGx5IiwKICAgICAgICAgICAgICAgICAgIGN1c3RvbV9ob3ZlcnRleHQgPSBob3ZlcnRleHQsCiAgICAgICAgICAgICAgICAgICB4bGFiID0gIjxiPlNhbXBsZTwvYj4iLAogICAgICAgICAgICAgICAgICAgeWxhYiA9ICI8Yj5NaWNyb2JlPC9iPiIsCiAgICAgICAgICAgICAgICAgICBjb2xvcmJhcl94cG9zID0gMS4wMTksCiAgICAgICAgICAgICAgICAgICBjb2xvcmJhcl95cG9zID0gMC41LAogICAgICAgICAgICAgICAgICAgY29sb3JiYXJfbGVuID0gMC4zKSAlPiUKICBsYXlvdXQoeGF4aXMgPSBsaXN0KHNob3dncmlkID0gRkFMU0UpLAogICAgICAgICB5YXhpcyA9IGxpc3Qoc2hvd2dyaWQgPSBGQUxTRSwKICAgICAgICAgICAgICAgICAgICAgIHNob3d0aWNrbGFiZWxzID0gRkFMU0UpLAogICAgICAgICBmb250ID0gbGlzdChmYW1pbHkgPSAiQXJpYWwiKSkgJT4lCiAgY29sb3JiYXIodGl0bGUgPSAiUmVsYXRpdmUgYWJ1bmRhbmNlIiwKICAgICAgICAgICB0aWNrdmFscyA9IGMoLTEsIDAsIDEpLAogICAgICAgICAgIHRpY2t0ZXh0ID0gYygiMC4xJSIsICIxJSIsICIxMCUiKSkKCiMgRm9ybWF0IHJvdyBzaWRlCnBIZWF0JHgkbGF5b3V0JHhheGlzMiR0aWNrdGV4dCA8LSAiUGh5bHVtIgpwSGVhdCR4JGxheW91dCR4YXhpcyRsaW5lY29sb3IgPC0gIiMwMDAwMDAiCnBIZWF0JHgkbGF5b3V0JHhheGlzMiRsaW5lY29sb3IgPC0gIiMwMDAwMDAiCnBIZWF0JHgkbGF5b3V0JHlheGlzJGxpbmVjb2xvciA8LSAiIzAwMDAwMCIKcEhlYXQkeCRsYXlvdXQkbGVnZW5kJHlhbmNob3IgPC0gImJvdHRvbSIKcEhlYXQKYGBgCioqRmlndXJlIDI6KiogSGVhdCBtYXAgc2hvd2luZyByZWxhdGl2ZSBhYnVuZGFuY2Ugb2YgbWljcm9iZXMgaW4gZWFjaCBzYW1wbGUgKE4gPSAxNDggdG90YWwgaWRlbnRpZmllZCkuIEVhY2ggcm93IGNvcnJlc3BvbmRzIHRvIGEgdW5pcXVlIG1pY3JvYmUgYW5kIGVhY2ggY29sdW1uIGNvcnJlc3BvbmRzIHRvIGFuIGluZGl2aWR1YWwgc2FtcGxlLiBOb3RlIHRoZSByZWxhdGl2ZSBhYnVuZGFuY2UgY29sb3JzY2FsZSBpcyBpbiBsb2cgdW5pdHMuCgo8YnI+PGJyPgoKPGRpdiBjbGFzcz0iaGlnaGxpZ2h0Ij4KIyMjIDEuMyBOb3RhYmxlIG1pY3JvYmVzIGRldGVjdGVkCjwvZGl2PgoKKiAqQmlmaWRvYmFjdGVyaXVtIHN0ZXJjb3Jpcyo6CiAgKiBQcmV2aW91c2x5IGlzb2xhdGVkIHN0cmFpbnMgc2hvd24gdG8gcHJvZHVjZSBnYW1tYS1hbWlub2J1dHlyaWMgYWNpZCAoR0FCQSkgKER1cmFudGkgKmV0IGFsKi4sIDIwMjApLCBhIGNvbXBvdW5kIHRoYXQgcGxheXMgYSByb2xlIGluIG1pdGlnYXRpbmcgYW54aWV0eSBhbmQgZGVwcmVzc2l2ZSBkaXNvcmRlcnMKICAqIENvbXBvc2VkIDEtNSUgb2YgQ2FwU2Nhbi1zYW1wbGVkIG1pY3JvYmlhbCBjb21tdW5pdGllcwogICogPHU+Tm90ZTo8L3U+IFJlbmFtZWQgKkJpZmlkb2JhY3Rlcml1bSBhZG9sZXNjZW50aXMqIGluIDIwMTMgKEtpbGxlciAqZXQgYWwqLiwgMjAxMykKPGJyPjxicj4KKiAqRXZ0ZXBpYSBnYWJhdm9yb3VzKjoKICAqIFByZXZpb3VzbHkgaXNvbGF0ZWQgc3RyYWluIHNob3duIHRvIG1ldGFib2xpemUgR0FCQSwgbGlrZWx5IHVzaW5nIGl0IGFzIGEgY2FyYm9uIGFuZCBlbmVyZ3kgc291cmNlIChTdHJhbmR3aXR6ICpldCBhbCouLCAyMDE5KQogICogQ29tcG9zZWQgMS0yJSBvZiBDYXBTY2FuLXNhbXBsZWQgbWljcm9iaWFsIGNvbW11bml0aWVzCiAgCjxicj48YnI+Cgo8ZGl2IGNsYXNzPSJoaWdobGlnaHQiPgojIyMgMS40IFJlZmVyZW5jZXMKPC9kaXY+CgpEdXJhbnRpLCBTLiwgUnVpeiwgTC4sIEx1Z2xpLCBHLkEuLCBUYW1lcywgSC4sIE1pbGFuaSwgQy4sIE1hbmNhYmVsbGksIEwuLCAqZXQgYWwqLiAoMjAyMCkgKkJpZmlkb2JhY3Rlcml1bSBhZG9sZXNjZW50aXMqIGFzIGEga2V5IG1lbWJlciBvZiB0aGUgaHVtYW4gZ3V0IG1pY3JvYmlvdGEgaW4gdGhlIHByb2R1Y3Rpb24gb2YgR0FCQS4gKlNjaSBSZXAqIDEwOiAx4oCTMTMuCgpLaWxsZXIsIEouLCBTZWRsw6HEjWVrLCBJLiwgUmFkYSwgVi4sIEhhdmzDrWssIEouLCBhbmQgS29wZcSNbsO9LCBKLiAoMjAxMykgUmVjbGFzc2lmaWNhdGlvbiBvZiAqQmlmaWRvYmFjdGVyaXVtIHN0ZXJjb3JpcyogS2ltICpldCBhbCouIDIwMTAgYXMgYSBsYXRlciBoZXRlcm90eXBpYyBzeW5vbnltIG9mICpCaWZpZG9iYWN0ZXJpdW0gYWRvbGVzY2VudGlzKi4gKkludCBKIFN5c3QgRXZvbCBNaWNyb2Jpb2wqIDYzOiA0MzUw4oCTNDM1My4KClN0cmFuZHdpdHosIFAuLCBLaW0sIEsuSC4sIFRlcmVraG92YSwgRC4sIExpdSwgSi5LLiwgU2hhcm1hLCBBLiwgTGV2ZXJpbmcsIEouLCAqZXQgYWwqLiAoMjAxOSkgR0FCQS1tb2R1bGF0aW5nIGJhY3RlcmlhIG9mIHRoZSBodW1hbiBndXQgbWljcm9iaW90YS4gKk5hdCBNaWNyb2JpbyogNDogMzk24oCTNDAzLgo=